﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Cms.Web.Framework.Plugins.Helpers;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Cms.Tests.Unit.WebFramework.Plugins
{
    [TestClass]
    public class SearchResultHelperTests
    {
        private string _html = @"<h1>Tr&auml;ningscoach</h1>  <h2>Din personliga tr&auml;nare</h2>  <p>Ibland beh&ouml;ver vi det d&auml;r " +
                                @"lilla extra f&ouml;r att komma vidare. Eller f&ouml;r att&nbsp;komma ig&aring;ng. V&aring;ra tr&auml;ningscoacher " +
                                @"kan hj&auml;lpa dig oavsett om det handlar om att trimma golfformen, klara Vasaloppet eller helt enkelt b&ouml;rja " +
                                @"tr&auml;na. Du s&auml;tter m&aring;len - vi hj&auml;lper dig n&aring; dem. Och oavsett vilket m&aring;l du har, ser " +
                                @"vi till att du har roligt l&auml;ngs v&auml;gen.<br /><br />Tr&auml;ningscoacherna &auml;r Friskis&amp;Svettis " +
                                @"motsvarighet till personliga tr&auml;nare. Samtliga &auml;r utbildade gyminstrukt&ouml;rer i grunden, och har olika " +
                                @"spetskompetenser, som h&auml;lsopedagog, idrottsl&auml;rare eller qi-gonginstrukt&ouml;r.<br /><br />N&auml;r du " +
                                @"tr&auml;nar tillsammans med en tr&auml;ningscoach blir passen effektiva b&aring;de f&ouml;r din utveckling och " +
                                @"tr&auml;ningslust. Det &auml;r roligare att vara tv&aring;, det g&aring;r l&auml;ttare om n&aring;gon peppar, och " +
                                @"smidigare om n&aring;gon guidar dig f&ouml;r att hitta r&auml;tt tr&auml;ning.</p>  <h2><strong>Vi &auml;r " +
                                @"tr&auml;ningscoacherna</strong></h2>  <p>H&auml;r hittar du v&aring;ra olika tr&auml;ningscoacher. &Auml;ven om de " +
                                @"&auml;r anslutna till en viss anl&auml;ggning &auml;r det s&aring;klart m&ouml;jligt att f&aring; just den coach du vill " +
                                @"ha, men p&aring; en annan anl&auml;ggning.</p>  <p><br /><br />&nbsp;</p>  <p>&nbsp;</p>  " +
                                @"<table class=""mceVisualAid"" border=""0"" cellspacing=""0"">  <tbody>  <tr>  <td class=""mceVisualAid"">  " +
                                @"<h3><strong>Priser:</strong></h3>  </td>  <td class=""mceVisualAid"">&nbsp;</td>  <td class=""mceVisualAid"">&nbsp;</td>  " +
                                @"<td class=""mceVisualAid"">&nbsp;</td>  </tr>  <tr>  <td class=""mceVisualAid"">  <p>Ett coachtillf&auml;lle</p>  </td>  " +
                                @"<td class=""mceVisualAid"">&nbsp;</td>  <td class=""mceVisualAid"">  <p>500 kr</p>  </td>  <td class=""mceVisualAid"">&nbsp;</td>  " +
                                @"</tr>  <tr>  <td class=""mceVisualAid"">  <p>Fem coachtillf&auml;llen</p>  </td>  <td class=""mceVisualAid"">&nbsp;</td>  " +
                                @"<td class=""mceVisualAid"">  <p>450 kr/g&aring;ng</p>  </td>  <td class=""mceVisualAid"">&nbsp;</td>  </tr>  <tr>  " +
                                @"<td class=""mceVisualAid"">  <p>Tio coachtillf&auml;llen</p>  </td>  <td class=""mceVisualAid"">&nbsp;</td>  " +
                                @"<td class=""mceVisualAid"">  <p>400 kr/g&aring;ng</p>  </td>  <td class=""mceVisualAid"">&nbsp;</td>  </tr>  </tbody>  </table>" +
                                @"<p>Om du <br />inte &auml;r medlem tillkommer 90 kr per tillf&auml;lle.<br /><br />De bokas via <br />receptionen.</p>  <p>&nbsp;</p>";

        [TestMethod]
        public void ExtractFirstOccurenceOfSearchQueryFromHtmlWithPadding_SearchPhraseIsHighlighted()
        {
            Assert.IsTrue(SearchResultHelper.ExtractFirstOccurenceOfSearchQueryFromHtmlWithPadding(_html, "qi-gong").IndexOf("<strong>qi-gong</strong>") > 0);
        }

        [TestMethod]
        public void ExtractFirstOccurenceOfSearchQueryFromHtmlWithPadding_NoHtmlTags()
        {
            string result = SearchResultHelper.ExtractFirstOccurenceOfSearchQueryFromHtmlWithPadding(_html, "qi-gong");
            result = result.Replace("<strong>qi-gong</strong>", "");
            Assert.IsTrue(result.IndexOf("<") == -1);
            Assert.IsTrue(result.IndexOf(">") == -1);
        }

        [TestMethod]
        public void ExtractFirstOccurenceOfSearchQueryFromHtmlWithPadding_NoDoubleWhiteSpace()
        {
            string result = SearchResultHelper.ExtractFirstOccurenceOfSearchQueryFromHtmlWithPadding(_html, "qi-gong");
            Assert.IsTrue(result.IndexOf("  ") == -1);
            Assert.IsTrue(result.IndexOf("\\r") == -1);
            Assert.IsTrue(result.IndexOf("\\n") == -1);
            Assert.IsTrue(result.IndexOf("&nbsp;") == -1);
        }

        [TestMethod]
        public void ExtractFirstOccurenceOfSearchQueryFromHtmlWithPadding_IncludeEverythingFromTheBeginningOfTheCurrentSentence()
        {
            string result = SearchResultHelper.ExtractFirstOccurenceOfSearchQueryFromHtmlWithPadding(_html, "qi-gong");
            string expected = "Samtliga &auml;r utbildade gyminstrukt&ouml;rer i grunden, och har olika spetskompetenser, som h&auml;lsopedagog, " +
                                "idrottsl&auml;rare eller <strong>qi-gong</strong>instrukt&ouml;r. N&auml;r du tr&auml;nar tillsammans med en " +
                                "tr&auml;ningscoach blir passen effektiva b&aring;de f&ouml;r din utveckling och tr&auml;ningslust.";
            Assert.AreEqual(expected, result);
        }
    }
}
